/*******************************************************
* Copyright (c) 2018-2088, By XuXiang all rights reserved.
*
* FileName: NetMsgLogin.h
* Summary: 登陆模块协议。
*
* Author: AutoBuild
* Date: --/--
*******************************************************/

#ifndef __NetMsgLogin_h__
#define __NetMsgLogin_h__

#include "../Macro.h"
#include "../Net/NetMessage.h"
#include "../Util/DataUtil.h"
#include <string>
#include <vector>
using namespace std;

namespace Competition
{
	namespace Net
	{
		//协议号
		namespace MsgID
		{
			const Int32 CS_LOGIN = 1001;						//用户登陆请求
			const Int32 CS_QUIT = 1002;							//用户退出请求
			const Int32 SC_LOGIN = 1401;						//用户登录回复
			const Int32 SC_QUIT = 1402;							//用户退出回复
			const Int32 SD_GET_USER = 1801;						//请求用户信息
			const Int32 DS_GET_USER = 1802;						//回复用户信息
			const Int32 SD_ADD_USER = 1803;						//请求添加用户
			const Int32 SD_UPDATE_USER_TIME = 1804;				//更新用户登录时间
		}

		//1001:用户登陆请求
		class CSLoginRequest : public NetMessage
		{
		public:
			CSLoginRequest();
			virtual int Unpack(Byte *buffer, int index);

			Int32 Type;								//登陆方式(0:游客 1:用户密码(暂不实现) 2:其它第三方(暂不实现))
			string DeviceID;						//设备ID
		};

		//1002:用户退出请求
		class CSQuitRequest : public NetMessage
		{
		};

		//1401:用户登录回复
		class SCLoginResponse : public NetMessage
		{
		public:
			SCLoginResponse();
			virtual int Pack(Byte *buffer, int index);

			Int32 Result;							//登陆结果(0:成功 1:用户密码错误 2:第三方登录校验失败)
			Int32 UserID;							//用户ID
			string NickName;						//昵称
			Int64 LastLogin;						//最后登录时间
			Int64 LastQuit;							//最后退出时间
		};

		//1402:用户退出回复
		class SCQuitResponse : public NetMessage
		{
		};

		//1801:请求用户信息
		class SDGetUserRequest : public NetMessage
		{
		public:
			SDGetUserRequest();
			virtual int Unpack(Byte *buffer, int index);
			virtual int Pack(Byte *buffer, int index);

			Int64 UID;								//连接标识
			Int32 Type;								//请求类型(0:游客 1:用户密码(暂不实现) 2:其它第三方(暂不实现))
			string DeviceID;						//设备ID
		};

		//1802:回复用户信息
		class DSGetUserResponse : public NetMessage
		{
		public:
			DSGetUserResponse();
			virtual int Unpack(Byte *buffer, int index);
			virtual int Pack(Byte *buffer, int index);

			Int64 UID;								//连接标识(1801原样返回)
			Int32 Type;								//请求类型(1801原样返回)
			string DeviceID;						//设备ID(1801原样返回)
			Int32 UserID;							//用户ID(0表示没获取到用户)
			string NickName;						//昵称
			Int64 CreateTime;						//创建时间
			Int64 LastLogin;						//最后登录时间
			Int64 LastQuit;							//最后退出时间
		};

		//1803:请求添加用户
		class SDAddUserRequest : public NetMessage
		{
		public:
			SDAddUserRequest();
			virtual int Unpack(Byte *buffer, int index);
			virtual int Pack(Byte *buffer, int index);

			Int32 UserID;							//用户ID
			Int32 Type;								//用户类型
			string DeviceID;						//设备ID
			string NickName;						//昵称
			Int64 CreateTime;						//创建时间
		};

		//1804:更新用户登录时间
		class SDUpdateUserTimeRequest : public NetMessage
		{
		public:
			SDUpdateUserTimeRequest();
			virtual int Unpack(Byte *buffer, int index);
			virtual int Pack(Byte *buffer, int index);

			Int32 UserID;							//用户ID
			Int64 LastLogin;						//最后登录时间
			Int64 LastQuit;							//最后退出时间
		};
	}
}

#endif
